#ifndef CMYSHORTCUTWIDGET_H
#define CMYSHORTCUTWIDGET_H

#include "../Common/CMyWindow.h"
#include "CMyShortcut.h"
#include "CShortcutDialog.h"

#include <QMenuBar>
#include <QVector>
#include <QWidget>
namespace Ui {
class CMyShortcutWidget;
}

class QListWidgetItem;
class CMyShortcutWidget : public CMyWindow {
    Q_OBJECT

  public:
    explicit CMyShortcutWidget(QWidget* parent = nullptr);
    ~CMyShortcutWidget();

    // 重写函数
    virtual void LoadSize(QWidget* parent) override;
    virtual void SaveSize(QWidget* parent) override;
    virtual QMenuBar* GetMenuBar() override;
    virtual int GetComponentId() override;

    // 返回模块名
    QString getModuleName();

    // 文件名
    QString getModeuleFileName();

  private slots:
    // 菜单
    void slotActionAddFile();
    void slotActionAddDirect();
    void slotActionFix();
    void slotActionDelete();

    // 列表
    void on_listWidget_doubleClicked(const QModelIndex& index);
    void on_listWidget_itemClicked(QListWidgetItem* item);
    void on_listWidget_itemEntered(QListWidgetItem* item);

    // 打开按钮
    void on_btnOpen_clicked();

  signals:
    void signalSetStatusText(const QString& text);
    void signalClose();

  protected:
    void contextMenuEvent(QContextMenuEvent* event) override;

  private:
    void addShortcutFromDialog();
    void addShortcutToWidget(CMyShortcut* shortcut, Qt::CheckState checkState = Qt::Unchecked);

    // 从对话框中获取快捷方式信息更新对应索引的快捷方式
    void fixShortcutFromDialog(int index);

    // 打开文件
    bool openFile(const QString& path);

    // 文件加载
    void saveFile();
    void loadFile();

    // 初始化菜单栏
    void initMenubar();

    // 设置主界面状态栏文字
    void setMainWindowStatusText(const QString& text);

  private:
    Ui::CMyShortcutWidget* ui;
    static QString s_strFileName;

    CShortcutDialog* m_shortcutDialog;
    QVector<CMyShortcut*> m_vShortcuts;

    // 菜单控件
    QMenuBar* m_pMenuBar;

    // 文件菜单
    QMenu* m_pMenuFile;
    QAction* m_pActionAddDirect;
    QAction* m_pActionAddFile;
    QAction* m_pActionFix;
    QAction* m_pActionDelete;
    QAction* m_pActionExit;
};

#endif  // CMYSHORTCUTWIDGET_H
